/**
 * 离屏渲染允许你以位图的方式来获取 BrowserWindow 中的内容，所以它可以在任何地方被渲染，例如在3D场景中的纹理。
 * Electron中的离屏渲染使用与 Chromium Embedded Framework 项目类似的方法。
 *
 * 有两种渲染模式可以使用（见下），只有未渲染区域传递到 绘图 事件才能提高效率。
 * 您可以停止/继续渲染并设置帧速率。
 * 最高帧速率为 240，因为更高的值只会带来性能上的损失而没有任何收益。
 * 当网页上没有发生任何情况时，不会生成帧。
 * 屏幕窗口始终创建为 无边框窗口..
 * 
 * 要启用此模式，必须通过调用 app.disableHardwareAcceleration() API 来禁用GPU加速。
 *
 */

const { app, BrowserWindow } = require('electron')
const fs = require('fs')
const path = require('path')

app.disableHardwareAcceleration()



function createWindow () {
  let win = new BrowserWindow({
    webPreferences: {
      offscreen: true
    }
  })
  win.loadURL('https://github.com')

  let resPath = path.join(process.cwd(), 'resources')

  win.webContents.on('paint', (event, dirty, image) => {
    fs.writeFileSync(path.join(resPath, 'ex.png'), image.toPNG())
  })

  win.webContents.setFrameRate(60)

  console.log('The screenshot has been successfully saved to resources/ex.png')
}

app.whenReady().then(() => {
  createWindow()
})

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})